export default class Utils {
    constructor() {}
    // 防抖的方法,让输入完毕后1秒在查询 [动，停下来，等一秒，才执行]
    debounce(func, wait) {
        let timeout;
        return () => {
            if (timeout) clearTimeout(timeout); // 取消之前的任务
            timeout = setTimeout(() => {
                // func.apply(this, arguments);
                func.apply(this); // 执行 func 函数
            }, wait)
        }
    } // 闭包

    // 防抖的方法,让输入完毕后立即查询，过1秒才能在查询（立即执行）[动一下，就执行，后面一直动，都不执行，在重新计算]
    /* debounce(func, wait) {
        let timeout;
        return () => {
            if (timeout) clearTimeout(timeout); // 取消之前的任务
            let callNow = !timeout; // 类型转换
            timeout = setTimeout(() => { // 增加一个定时器
                timeout = null; // 清空当前定时器
            }, wait);
            if (callNow) func.apply(this); // 第一次执行
        }
    } // 闭包 */

    // 防止用户使劲刷，使劲点
    // 定时器 固定的时间去发请求
    throttle(func, wait) {
        let timeout; // 定义一个定时器句柄
        return () => {
            if (!timeout) { // 是否存在定时器
                timeout = setTimeout(() => {
                    timeout = null;
                    func.apply(this);
                }, wait)
            }
        }
    }

    // 时间戳
    /* throttle(func, wait) {
        let prev = 0; // 上次记录的时间
        return () => {
            let now = Date.now();   // 当前时间
            if (now - prev > wait) { // 当前时间 - 上次时间 > 等待时间
                func.apply(this); // 执行函数 发送请求
                prev = now; // 重置上次记录时间
            }
        }
    } */
}